﻿CREATE PROCEDURE [dbo].[ShiftInLinesInsert]
(--приход от межскладского перемещения
	@DocId int,
	@GoodsId int,
	@BarCode char(12),
	@DocQntty int,  --количество по документу межскладского перемещения
	@Qntty int,			--фактическое количество
	@SupplierGoodsId int,
	@ManufacturerPrice decimal(19, 2),
	@SupplierPrice decimal(19, 2),
	@SupplierSumNOTAX decimal(19, 2), --Сумма по строке накладной без налогов
	@ImportMarkup float,
	@SupplierMarkup float,
	@BatchNumber varchar(20),
	@ReadyBefore smalldatetime,
	@MadeDate smalldatetime,
	@NDSTax tinyint,
	@NDSValue decimal(19, 2),
	@ReestrPrice decimal(19, 2),
	@ReestrDate smalldatetime,
	@GTDNumber varchar(30),
	@CertificateNumber varchar(80),
	@CertificateDate smalldatetime,
	@CertificateOrgId int,
	@RetailMarkup float,
	@RetailPrice decimal(19, 2),
	@ContragentId int, --идентификатор контрагента из приходной накладной от поставщика
	@ContragentDocDate smalldatetime, --дата накладной от поставщика
	@ContragentDocNumber varchar(20), --номер накладной от поставщика
	@ReturnLineId int,		--идентификатор строки расходной накладной
	@Note varchar(250),
	@MD datetime,
	@MW varchar(50)
)
AS
DECLARE @intRowCount int, @intInputLineId int
DECLARE @strMsg nvarchar(500), @intRet int, @intErrCode int

SET NOCOUNT ON
IF (@DocId Is Null) OR (@GoodsId Is Null) OR (@SupplierGoodsId Is Null) OR (@ReturnLineId Is Null)
BEGIN
	SELECT @intErrCode = 1, @strMsg = 'Неправильные параметры в вызове процедуры ' + Object_Name(@@Procid) + ' !'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END
--TODO проверить чтобы @SupplierGoodsId соответствовал @ContragentId
IF (@Qntty <= 0) OR (@RetailPrice <= 0)
BEGIN
	SELECT @intErrCode = 3, @strMsg = 'Количество и розничная цена д.б. больше нуля!'
	RAISERROR (@strMsg, 11, 1)
	RETURN @intErrCode
END

EXEC [dbo].[ProcessStatistic] @Note OUTPUT, @MD OUTPUT, @MW OUTPUT

--получение значения идентификатора
EXEC @intRet = dbo.GetNextCounterFor 'GoodsLines', @intInputLineId OUTPUT
IF @intRet <> 0 RETURN @intRet


IF (@Qntty Is NULL) OR (@Qntty < 1) --нет фактического количества по документу
BEGIN --проводки по документу не создаются
	SET NOCOUNT OFF;

	EXEC @intRet = dbo.InputLinesInsertUpdate @DocId,@GoodsId,@DocQntty,@SupplierGoodsId,@ManufacturerPrice,
	@SupplierPrice,@SupplierSumNOTAX,@ImportMarkup,@SupplierMarkup,@BatchNumber,@ReadyBefore,@MadeDate,
	@NDSTax,@NDSValue,@ReestrPrice,@ReestrDate,@GTDNumber,
	@CertificateNumber,@CertificateDate,@CertificateOrgId,@RetailMarkup,
	@ContragentId,@ContragentDocDate,@ContragentDocNumber,
	@Note,@MD,@MW,
	@intInputLineId, 0, @intRowCount OUTPUT
	IF @intRet <> 0 RETURN @intRet

END ELSE BEGIN

	BEGIN TRAN

	EXEC @intRet = dbo.InputLinesInsertUpdate @DocId,@GoodsId,@DocQntty,@SupplierGoodsId,@ManufacturerPrice,
	@SupplierPrice,@SupplierSumNOTAX,@ImportMarkup,@SupplierMarkup,@BatchNumber,@ReadyBefore,@MadeDate,
	@NDSTax,@NDSValue,@ReestrPrice,@ReestrDate,@GTDNumber,
	@CertificateNumber,@CertificateDate,@CertificateOrgId,@RetailMarkup,
	@ContragentId,@ContragentDocDate,@ContragentDocNumber,
	@Note,@MD,@MW,
	@intInputLineId, 1, @intRowCount OUTPUT
	IF @intRet <> 0 RETURN @intRet

	EXEC @intRet = dbo.PartyGoodsInsert	@intInputLineId, @DocId, @GoodsId,
	@BarCode, @Qntty, @RetailPrice, @ReturnLineId,
	@Note, @MD, @MW, 0
	IF @intRet <> 0 RETURN @intRet

	COMMIT TRAN
END

SELECT Id, DocId, GoodsId, BarCode, DocQntty, Qntty, RetailSum, SupplierGoodsId, ManufacturerPrice, 
SupplierPrice, SupplierSumNOTAX, ImportMarkup, SupplierMarkup, BatchNumber, ReadyBefore, MadeDate, NDSTax, 
NDSValue, ReestrPrice, ReestrDate, GTDNumber, CertificateNumber, CertificateDate, 
CertificateOrgId, RetailMarkup, RetailPrice, ReturnLineId, Note, MD, MW 
FROM dbo.vwInputLines WHERE (Id = @intInputLineId)

RETURN 0



